// 配置路由守卫
// 进度条
import nprogress from "nprogress"
import router from '@/router/index'
import 'nprogress/nprogress.css'
import store from '@/store/index'
// 导入动态路由
import {asyncRoutes} from '@/router/index'
// 前置守卫
// 白名单
const whitePath=['/login','/404']
router.beforeEach(async (to,from,next)=>{
  // 开启进度条
  nprogress.start()
  if(store.getters?.token) {
    if(to.path==='/login') {
       next('/')
       // 当next(地址)有地址时就不会执行后置守卫了 所以要手动关闭进度条
       nprogress.done()
    } 
    else{
      // 是否获取了用户信息
      if(!store.getters.userId) {
        // 本地存储
         await store.dispatch('user/userMsg') 
        // 获取用户权限
        const {menus}=store.state.user.userInfo.roles
        // 筛选路由
        const filterRoutes=asyncRoutes.filter(item=>{
          return menus.includes(item.name)
        })
        console.log(filterRoutes);
        // 添加动态路由
        router.addRoutes([...filterRoutes,{ path: '*', redirect: '/404', hidden: true }])
        store.commit('user/setRoutes',filterRoutes);
        next(to.path)  // 目的是让路由拥有信息 router的已知缺陷
      } else {
        next()
      }
      }
    }
  else {
    if(whitePath.includes(to.path)) {
      next()
    }
    else {
      next('/login')
      nprogress.done()
    }
  }
})



// 后置守卫
router.afterEach((to,from,next)=>{
  // 关闭进度条
  nprogress.done()

})


